|
|
|
|
|
|
|
C/C++本地代码调试
帖子发起人: sPhinX 发起时间: 2009-11-16 17:00 下午 回复: 3
|
帖子排序:
|
|
|
|
2009-11-16, 17:00 下午
|
sPhinX
注册: 2008-06-28
发 贴: 50
|
|
|
最近碰到一个很奇怪的问题,细细描述如下:
由于历史原因,现在维护的一个程序是使用的BCB6,最近增加了一个判断Windows版本的功能,这个功能是用PJ Naughter的DtWinVer v1.79来实现的。
奇怪的问题出现在加入这个类之后,获取Windows版本号的时候,发现获取的版本号居然是7.3,汗,我的可是XP SP3,应该是5.1才对啊,本来以为是系统用太久了,很多东西被搞乱了,但是我又写了个小测试程序,在同一个系统获取版本号,居然又是对的。(注:出问题的程序在其他人的计算机和其他系统下都是正常的)
这两个程序看起来除了规模大小不一样,暂时也没看出什么问题来。没办法,还是一步一步跟吧,跟踪的结果发现出在这一行:
lpfnGetVersionEx lpGetVersionEx = (lpfnGetVersionEx) GetProcAddress(hKernel32, "GetVersionExA");
在前面获取dll地址的时候两边程序的地址都是一样的7C800000
HMODULE hKernel32 = GetModuleHandle(_T("KERNEL32.DLL"));
但是在获取函数地址的时候,小程序返回的是7C812B7E,但是出问题的程序返回的是00392FA3,这地址差别也太大了吧,然后用Sysinternals新出的工具VMMap查看两边进程的内存空间,发现00392FA3这个地址应该是属于vfcompat.dll,再看看这个dll的描述:“Application Verifier Provider - OS compatibility issues detection.”
看起来像是系统检查程序的兼容性,但是查看小程序的内存空间,里面就没有这个dll,难道系统只检查大程序的兼容性么?这下我没辙了,来请教一下诸位高人,给指点下迷津,如何解决这个问题,谢谢。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-11-16, 17:26 下午
|
sPhinX
注册: 2008-06-28
发 贴: 50
|
|
|
http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/8498b51d-7e0d-4764-b695-f69cbf8da46f
通过MSDN搜到了这篇贴子(实际上我在Google上也搜过,不过Google的小标题让我忽视了这篇贴子,唉),读完之后(事实上是还没读完我就去打开了Application Verifier),就像贴子里面描述的那样“then I remembered that a long time ago I started the program "Application verifier" from the "Microsoft Application Compatibility Toolkit"”,然后我去掉了对程序的兼容性检查,这下,世界清静了。
汗自己一个......:(
原来Application Verifier就有这个功能:
OS Versioning
We found that quite a few applications fail to install or run on Windows 7, simply because the version check does not account for future versions of Windows. Typically, there is a pre-requisite check in the installer, that calls GetVersionEx/GetVersion to find out if the current operating system is supported or not.
In many cases, the installer checks if dwMajorVersion is 5, which covers Windows 2000, Windows XP, and Windows Server 2003.
However, for Windows 7 (the version number is 6.1) the check will fail and the application won't install or execute.
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-12-10, 15:11 下午
|
手语
注册: 2008-06-06
发 贴: 73
|
|
|
兄弟很有娱乐精神啊,嗬嗬,鼓励
找到问题就好
鸿鹄安知燕雀之志
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-12-16, 16:00 下午
|
sPhinX
注册: 2008-06-28
发 贴: 50
|
Re: 是谁影响了GetProcAddress?
|
|
|
|
开发就是这样的,各种各样的奇怪问题都可能碰到,这不算娱乐吧,要不可以问问论坛上的大家,谁没碰到过几个莫名其妙的问题。哈
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » C/C++本地代码调试 » 是谁影响了GetProcAddress?
|
|
|
|
|
|